﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

using Urgencias.Modelo;

namespace Urgencias.Controlador
{
    class PacienteControlador
    {
        private static PacienteControlador instance;
        Paciente p;

        public PacienteControlador()
        {
            p = new Paciente();
        }

        public static PacienteControlador Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new PacienteControlador();
                }

                return instance;
            }
        }

        public bool validarRut(string rut)
        {
            return p.validarDigito(rut);
        }

        public bool ingresarPaciente(string Rut,string Nombre,string ApellidoPaterno, string ApellidoMaterno)
        {
            return ingresarPaciente(Rut, Nombre, ApellidoPaterno, ApellidoMaterno, DateTime.MinValue,'O', "", "", "");
        }

        public bool ingresarPaciente(string RUN ,string NOMBRE,string APELLIDOPATERNO, string APELLIDOMATERNO,DateTime FECHANACIMIENTO, char SEXO,string TELEFONOPACIENTE,string DIRECCION_PACIENTE, string PREVISION_PACIENTE)
        {
            
            try
            {
                if(PersonaControlador.Instance.ingresarPersona(RUN,NOMBRE,APELLIDOPATERNO,APELLIDOMATERNO,FECHANACIMIENTO,SEXO))
                {
                    //SqlConnection con = new SqlConnection(Conexion.Instance.connectionString);
                    SqlCommand com = new SqlCommand();
                

                    com.CommandText = "INSERT INTO PACIENTE" +
                        "(RUN, NOMBRE, APELLIDOPATERNO, APELLIDOMATERNO,FECHANACIMIENTO, SEXO,  TELEFONOPACIENTE, DIRECCION_PACIENTE, PREVISION_PACIENTE)" + "VALUES" +
                        "(@run, @nombre, @apellidopaterno, @apellidomaterno,@fechanacimiento,@sexo, @telefonopaciente, @direccion_paciente, @prevision_paciente)";

                    com.Parameters.AddWithValue("@run", RUN);
                    com.Parameters.AddWithValue("@nombre", NOMBRE);
                    com.Parameters.AddWithValue("@apellidopaterno", APELLIDOPATERNO);
                    com.Parameters.AddWithValue("@apellidomaterno", APELLIDOMATERNO);
                    com.Parameters.AddWithValue("@sexo", SEXO);
                    com.Parameters.AddWithValue("@fechanacimiento", FECHANACIMIENTO);
                    com.Parameters.AddWithValue("@telefonopaciente", TELEFONOPACIENTE);
                    com.Parameters.AddWithValue("@direccion_paciente", DIRECCION_PACIENTE);
                    com.Parameters.AddWithValue("@prevision_paciente", PREVISION_PACIENTE);

                    com.Connection = Conexion.Instance.Con;
                    SqlDataReader ejecutar = com.ExecuteReader();
                    if (ejecutar.Read())
                    {
                        //ejecutar.t
                    }
                    Conexion.Instance.Con.Close();
                    return true;
                }
                else
                    return false;
            }
            catch (Exception e)
            {
                Conexion.Instance.Con.Close();
                Console.WriteLine(e.Message);
                return false;
                throw;
            }
        }

        public bool modificarPaciente(string Rut, string Nombre, string ApellidoPaterno, string ApellidoMaterno, DateTime FechaNacimiento, char Sexo, string TelefonoPaciente, string DireccionPaciente, string PrevisionPaciente)
        {
            try
            {
                SqlCommand com = new SqlCommand();
                

                com.CommandText = "UPDATE PACIENTE " +
                    "SET RUN = @run, NOMBRE = @nombre, APELLIDOPATERNO = @apellidopaterno, APELLIDOMATERNO = @apellidomaterno,FECHANACIMIENTO = @fechanacimiento, SEXO = @sexo, TELEFONOPACIENTE = @telefonopaciente, DIRECCION_PACIENTE = @direccion_paciente, PREVISION_PACIENTE = @prevision_paciente " +
                    "WHERE RUN = @run";

                com.Parameters.AddWithValue("@run", Rut);
                com.Parameters.AddWithValue("@nombre", Nombre);
                com.Parameters.AddWithValue("@apellidopaterno", ApellidoPaterno);
                com.Parameters.AddWithValue("@apellidomaterno", ApellidoMaterno);
                com.Parameters.AddWithValue("@sexo", Sexo);
                com.Parameters.AddWithValue("@fechanacimiento", FechaNacimiento);
                com.Parameters.AddWithValue("@telefonopaciente", TelefonoPaciente);
                com.Parameters.AddWithValue("@direccion_paciente", DireccionPaciente);
                com.Parameters.AddWithValue("@prevision_paciente", PrevisionPaciente);

                com.Connection = Conexion.Instance.Con;
                SqlDataReader ejecutar = com.ExecuteReader();
                // TODO terminar esto

                

                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                
                return false;
                throw;
            }
        }

        public bool eliminarPaciente(string rut)
        {
            bool resultado = false;
            try
            {
                
                SqlCommand com = new SqlCommand("DELETE FROM PACIENTE WHERE RUN = '" + rut + "')");
                SqlDataReader ejecutar = com.ExecuteReader();
                if (ejecutar.Read())
                {
                    resultado = true;
                }
                Conexion.Instance.Con.Close();
                return resultado;
            }
            catch (Exception)
            {
                Conexion.Instance.Con.Close();
                return resultado;
                throw;
            }
        } 

        public Paciente buscarPaciente(string rut)
        {
            Paciente p = new Paciente();

            try
            {
                SqlCommand com = new SqlCommand();
                

                com.CommandText = "select * from PACIENTE where RUN='" + rut + "'";
                com.Connection = Conexion.Instance.Con;

                SqlDataReader ejecuta = com.ExecuteReader();

                if (ejecuta.Read() == true)
                {
                    p.Run = (string)(ejecuta["RUN"]);
                    p.Nombre = ((string)(ejecuta["NOMBRE"])).Trim();
                    p.ApellidoMaterno = ((string)(ejecuta["APELLIDOMATERNO"])).Trim();
                    p.ApellidoPaterno = ((string)(ejecuta["APELLIDOPATERNO"])).Trim();
                    string v = ((string)(ejecuta["SEXO"])).Trim();
                    p.Sexo = v[0];
                    p.FechaNacimiento = (DateTime)(ejecuta["FECHANACIMIENTO"]);
                    p.TelefonoPaciente = ((string)(ejecuta["TELEFONOPACIENTE"])).Trim();
                    p.DireccionPaciente = ((string)(ejecuta["DIRECCION_PACIENTE"])).Trim();
                    p.PrevisionPaciente = ((string)(ejecuta["PREVISION_PACIENTE"])).Trim();
                }
                else
                {
                    p = null;
                }
                Conexion.Instance.Con.Close();

                return p;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Conexion.Instance.Con.Close();
                return null;
                throw;
            }
        }
    }
}